package com.hy.frame.util

import android.app.ActivityManager
import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.content.pm.PackageManager.NameNotFoundException
import android.os.Environment
import android.text.TextUtils
import android.view.View
import com.hy.frame.R
import java.io.File

/**
 * 常用工具
 * @author HeYan
 * @time 2014年12月24日 下午1:43:34
 */
object HyUtil {


    /**
     * 返回当前程序版本信息
     */
    fun getAppVersion(context: Context): PackageInfo? {
        return try {
            context.packageManager.getPackageInfo(context.packageName, 0)
        } catch (e: Exception) {
            MyLog.e("VersionInfo|Exception:$e")
            null
        }
    }

    /**
     * 检测该包名所对应的应用是否存在
     */
    fun checkPackage(context: Context, packageName: String): Boolean {
        if (TextUtils.isEmpty(packageName))
            return false
        return try {
            context.packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
            true
        } catch (e: Exception) {
            false
        }

    }


    /**
     * @return null may be returned if the specified process not found
     */
    fun getProcessName(cxt: Context, pid: Int): String? {
        val am = cxt.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val runningApps = am.runningAppProcesses ?: return null
        for (procInfo in runningApps) {
            if (procInfo.pid == pid) {
                return procInfo.processName
            }
        }
        return null
    }

    private var lastTime: Long = 0

    /**
     * 是否是快速点击
     */
    val isFastClick: Boolean
        get() {
            val curTime = System.currentTimeMillis()
            if (curTime - lastTime < 500)
                return true
            lastTime = curTime
            return false
        }


    fun getCachePath(context: Context, dirType: String?): String? {
        var f = context.getExternalFilesDir(dirType)
        if (f == null) {
            f = context.filesDir
            if (f == null)
                return null
            if (!f.exists())
                f.mkdirs()
            if (dirType.isNullOrEmpty()) return f.path
            val file = File(f, dirType)
            // 判断文件夹存在与否，否则创建
            if (!file.exists() && file.mkdirs()) {
                return file.path
            }
            return f.path
        } else {
            return f.path
        }
    }

    /**
     * 获取相册缓存路径
     */
    fun getCachePathWeb(context: Context): String? {
        return getCachePath(context, "Web")
    }

    /**
     * 获取下载缓存路径
     */
    fun getCachePathDownload(context: Context): String? {
        return getCachePath(context, Environment.DIRECTORY_DOWNLOADS)
    }

    /**
     * 获取相册缓存路径
     */
    fun getCachePathAlbum(context: Context): String? {
        return getCachePath(context, "Album")
    }

    /**
     * 获取剪切缓存路径
     */
    fun getCachePathCrop(context: Context): String? {
        return getCachePath(context, "CropFile")
    }

    /**
     * 获取音频缓存路径
     */
    fun getCachePathAudio(context: Context): String? {
        return getCachePath(context, "AudioFile")
    }

    /**
     * 获取音频缓存路径
     */
    fun getCachePathAudioC(context: Context): String? {
        return getCachePath(context, "AudioFileC")
    }

    /**
     * 获取视频缓存路径
     */
    fun getCachePathVideo(context: Context): String? {
        return getCachePath(context, "VideoFile")
    }

    /**
     * 获取视频缓存路径
     */
    fun getCachePathVideoC(context: Context): String? {
        return getCachePath(context, "VideoFileC")
    }

    /**
     * 获取图片缓存路径
     */
    fun getCachePathImage(context: Context): String? {
        return getCachePath(context, "Image")
    }

    /**
     * 获取缓存大小
     * @param context
     */
    fun getCacheSize(context: Context): String? {
        // 取得sdcard文件路径
        val path = getCachePath(context, null) ?: return "0M" // "mnt/sdcard"
        return FileUtil.getFileOrFilesSizeStr(path)
    }

    /**
     * 清空缓存
     */
    fun clearCache(context: Context): Boolean {
        return FileUtil.delAllFile(getCachePath(context, null))
    }

}